<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>寄生式继承</title>
</head>
<body>
    <script>
        // 寄生式继承：寄生式继承就是把原型式继承再次封装，然后在对象上扩展新的方法，再把新对象返回
        function objectCopy(obj) {
            function Fun() {};   // 创建构造函数
            Fun.prototype = obj;  // 构造函数的原型为这个obj
            return new Fun();   // 返回实例对象
        };

        function createAnother(original) {
            let clone = objectCopy(original);   // 一个实例
            clone.getName = function() {   // 给实例添加一个getName方法
                console.log(this.name);
            };
            return clone;   // 返回实例
        };

        let person = {
            name: 'Katrina', 
            firends: ['rose', 'tom', 'jack'],
        };

        let p1 = createAnother(person);
        p1.firends.push('lily');
        console.log(p1.firends); // ['rose', 'tom', 'jack', 'lily']
        p1.getName(); // 'Katrina'

        let p2 = createAnother(person);
        console.log(p2.firends); // ['rose', 'tom', 'jack', 'lily']
    </script>
</body>
</html>